#include <bits/stdc++.h>
#define int long long 
using namespace std;

const int maxn = 5e5 + 10;
const int p = 1e9 + 7;
int fac[maxn]; // 阶乘
int n, m;

int qmi(int a, int b){
	int res=1;
	while(b){
		if(b&1){
			res=res*a%p;
		}
		a=a*a%p;
		b>>=1;
	}
	return res;
}

int inv(int x){
	return qmi(x, p-2);
}

int C(int n, int m){
	return fac[n]*inv(fac[n-m])%p*inv(fac[m])%p;
}


void solve(){
	
	cin>>n>>m;
	fac[0]=1;
	for(int i=1;i<=m;i++){
		fac[i]=fac[i-1]*i%p;
	}
	
	int cnt1=C(m, n)*fac[n]%p;
	int sub=0;
	int flag=-1;
	// 
	for (int i=1;i<=n;i++) {
		flag=flag*(-1);
		sub=(sub+flag*C(n, i)%p*C(m-i, n-i)%p*fac[n-i]%p)%p;
	}
	
	cout<<cnt1*((cnt1-sub+p)%p)%p<<'\n';
	
}

signed main(){
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	solve();
	return 0;
}
